from peewee import *
from datetime import date

# 为爬虫建好各种数据表
db = MySQLDatabase("spider_db", host="localhost", port=3306, user="root", password="123456")


# 映射表基类
class BaseModel(Model):
    class Meta:
        database = db


"""
 建立表时，需要注意的几个点
1.char类型，需要设置最大长度 CharField()默认为255，如果大于255 需要重新设定 eg:max_length=1000
2.对于无法获知字段最大长度的属性，可以设置位Text类型(不限长度，但效率会降低)
3.设计表的时候，采集到的数据要尽量先做格式化处理. eg:获取时间类型的字段定义为Date类型，不要用Char或Text
4.default=True和null=True的情况，属性是否可以允许为空，或者有默认值，防止save的时候报错
"""


# 文章数据表
class Topic(BaseModel):
    title = CharField()  # 标题
    content = TextField(default="")  # 内容
    id = IntegerField(primary_key=True)  # id 主键
    author = CharField()  # 作者
    create_time = DateTimeField()  # 创建时间
    answer_nums = IntegerField(default=0)  # 回答数
    click_nums = IntegerField(default=0)  # 查看数
    support_nums = IntegerField(default=0)  # 点赞数
    jtl = FloatField(default=0.0)  # 结贴率
    score = IntegerField(default=0)  # 悬赏分
    status = CharField()  # 帖子状态


# 回答贴表数据
class Answer(BaseModel):
    topic_id = IntegerField()
    author = CharField()
    content = TextField(default="")
    create_time = DateTimeField()
    support_nums = IntegerField(default=0)  # 点赞数


# 用户信息表
class Author(BaseModel):
    name = CharField()  # 用户名
    id = CharField()  # 用户id
    click_nums = IntegerField(default=0)  # 访问数
    original_nums = IntegerField(default=0)  # 原创数量
    forward_nums = IntegerField(default=0)  # 转发数
    rate = IntegerField(default=-1)  # 排名
    answer_nums = IntegerField(default=0)  # 评论数
    support_nums = IntegerField(default=0)  # 获赞数
    description = TextField(null=True)  # 个人简介 可能为空
    industry = CharField(null=True)  # 行业
    location = CharField(null=True)  # 地址
    follower_nums = IntegerField(default=0)  # 粉丝数
    following_nums = IntegerField(default=0)  # 关注数


if __name__ == '__main__':
    db.create_tables([Topic, Answer, Author])
